package com.java.inheritstudy;

/**
 * @author Lenl
 * @create 2021-05-29 17:54
 */
public class Student extends Person {
//    String name;
//    int age;
    String major;

    public Student(){

    }


    public Student(String name, int age, String major) {
//        this.name = name;
//        this.age = age;

        //super调用构造器,必须声明在子类构造器的首行
        //构造器中this(形参列表),super(形参列表)无法同时出现
        //在构造器中首行没有this(形参列表),super(形参列表)时，默认会有super()
        super(name,age);
        this.major = major;
    }
    //继承以下方法，不用再写
//    public void eat(){
//        System.out.println("吃饭");
//    }
//    public void sleep(){
//        System.out.println("睡觉");
//    }

    //方法的重写
    /**
     * 1.重写，子类可以对父类同名同参方法进行覆盖操作
     * 2.应用，重写后子类对象调用的是子类覆盖后的方法
     * 3.重写的规定：
     *   方法的声明：权限修饰符 返回值类型 方法名(形参列表) throws 异常的类型 {}
     *   ①子类重写的方法名和形参列表和父类被重写的方法名和形参列表相同
     *   ②子类重写的权限修饰符应大于等于父类被重写方法的权限
     *    >特殊情况：子类不能重写父类声明为private权限的方法
     *   ③返回值类型
     *    >父类返回值void，重写后仍未void
     *    >父类返回值为A，重写后返回值可以是A或A的子类
     *    >父类返回基本数据类型，则重写后返回类型必须为相同的基本数据类型
     *    >子类重写方法抛出的异常不大于父类的抛出的异常
     *
     *   ④子类和父类同名同参的方法要么都声明为非static的(重写),要么都static（非重写）
     *
     */
    @Override
    public void eat(){
        System.out.println("吃零食");
    }

    public void study(){
        //重写的eat
        eat();
        System.out.println("学习课程");
        //******  super *********//
        //super可以调属性、方法、构造器
        // super关键字调用父类被重写的方法
        super.eat();
    }
}
